WindowManager (窗口管理服务) 是显示 View 的最底层,Toast,Activity,Dialog 的底层都用到了这个 WindowManager
WindowManager (窗口管理服务) 是全局的,通过调用 addView(),removeView(),updateViewLayout() 这几个方法来显示 View 以及通过 WindowManager.LayoutParams 这个 API 来设置相关的属性
WindowManagerWindowManager 是 Android 为我们提供的用于与窗口管理器进行交互的一个 API
我们都知道 App 的界面都是由一个个的 Acitivty 组成,而 Activity 又由 View 组成,当我们想显示一个界面的时候,第一时间想起的是 Activity,又或是 Dialog 和 Toast
但是有些情况下,前面这三者可能满足不了我们的需求,比如我们仅仅是一个简单的显示用 Activity 显得有点多余了,而 Dialog 又需要 Context 对象,Toast 又不可以点击...
在这种情况下, WindowManager 就派上用场了,它可以添加 View 到屏幕上或者从屏幕上移除 View
WindowManager 就是管理 Android 窗口机制的一个接口,显示 View 的最底层
获得 WindowManager 实例获得 WindowManager 对象
WindowManager wManager = getApplicationContext().getSystemService(Context. WINDOW_ SERVICE);获得 WindowManager.LayoutParams 对象,为后续操作做准备
WindowManager.LayoutParams wmParams=new WindowManager.LayoutParams();使用 WindowManager 获取屏幕宽高获取当前设备的屏幕高宽可以使用下面的语句
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);DisplayMetrics dm = new DisplayMetrics();wm.getDefaultDisplay().getMetrics(dm);int width = dm.widthPixels;int height = dm.heightPixels;我们写一个范例来演示下
创建一个 空的 Android 项目 cn.twle.android.ScreenSize
修改 activity_main.xml
修改 MainActivity.java
package cn.twle.android.screensize;import android.content.Context;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.DisplayMetrics;import android.view.WindowManager;import android.widget.TextView;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView ms_screen_size = (TextView)findViewById(R.id.ms_screen_size);WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);DisplayMetrics dm = new DisplayMetrics();wm.getDefaultDisplay().getMetrics(dm);ms_screen_size.setText("当前手机的屏幕宽高:" + dm.widthPixels + "x" + dm.heightPixels);}}WindowManager 设置窗口全屏显示WindowManager 设置窗口全屏显示就两行代码
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);getSupportActionBar().hide();复用上面的范例
修改 activity_main.xml
package cn.twle.android.screensize;import android.content.Context;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.DisplayMetrics;import android.view.WindowManager;import android.widget.TextView;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);getSupportActionBar().hide();super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView ms_screen_size = (TextView)findViewById(R.id.ms_screen_size);WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);DisplayMetrics dm = new DisplayMetrics();wm.getDefaultDisplay().getMetrics(dm);ms_screen_size.setText("当前手机的屏幕宽高:" + dm.widthPixels + "x" + dm.heightPixels);}}WindowManager 保持屏幕常亮保持屏幕一直高亮就一行代码
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);取消屏幕高亮
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);参考文档官方 API 文档 : WindowManager
官方文档:WindowManager.LayoutParams
Android系统服务-WindowManager